// 将tokens处理成嵌套的tokens
export default function (tokens) {
    // 最终结果
    let nestedTokens = []
    // 栈结构，存放小tokens。栈顶的tokens数组中当前操作的这个tokens的第三项小数组
    let sections = []
    /**
     * 收集器，默认指向nestedTkens结果数组
     * 当匹配到 # 的时候，改变收集器的指向，指向到当前token中新开辟的下一个维度的token
     * 当匹配到 / 的时候，改变收集器的指向，判断当前栈sections是否有值？有值，则指向当前的栈顶；没值，则指向最终结果 nestedTokens
     */
    let collector = nestedTokens

    for (let i = 0; i < tokens.length; i++) {
        let token = tokens[i]
        switch (token[0]) {
            case '#':
                // // 收集当前维度的 子项
                collector.push(token)
                // 入栈
                sections.push(token)
                // 修正当前的收集器指向 新开辟的子项
                collector = token[2]= []
                // console.log(collector, token[2],'collector')
                break;
            case '/':
                // 出栈
                sections.pop()
                collector = sections.length ?
                    sections[sections.length - 1][2] :
                    nestedTokens
                break;
            default:
                collector.push(token)
                break;
        }
    }
    return nestedTokens
}